#ifndef NW_ORDER_H_
#define NW_ORDER_H_

#include "nw_client_struct.h"
#include "nw_costmode.h"

struct t_order_elecmsg
{
 uint32 flag;//标志位 尖峰平谷
 uint32 power;//时段用电量  保留小数点后两位 0.01kwh
 uint32 eleccost;//时段总金额 先保留小数点后五位  单位元
 uint32 serve_cost;//服务费总价 先保留小数点后五位
 uint32 position_cost;//占位费金额 先保留小数点后五位
 uint32 reserve_cost;//预约费金额	先保留小数点后五位
};
struct t_nw_order
{
	 uint8 orderstate;//订单的状态//0 不可用 1  可用
	 struct t_cli_costmode *costmode;//计费模型指针
	 uint32 first_update_flag;
	 uint8 startway;//启动方式 0 远程启动 1刷卡 2 VIN
	   
	 uint8 devnum[8];//设备号
	 uint32 gunno;//枪号
	
	 uint8  type;//充电方式 1字节bcd码 ，00 自 动；01 按电量；02 按时间；03 按金额
	 uint32 value;//启动附带参数 精确到小数点后两位
	
	 uint8 cardno[8];//物理卡号
   uint8 vin[32];//车辆的vin编号	
	
	 uint32 remainkm;// 剩余里程 精确到小数点后两位
	 uint32 remainpower;//可充电量 BIN 码 4Byte 精确到小数点后两位
   uint32 remaincnt;// 剩余次数 BIN 码 4Byte 精确到小数点后两位

	 uint32 user_remain;//订单用户余额 单位元，精确到 0.01
	 uint32 userid[8];//用户id  八位bcd码
	
	 uint32 order[8];//订单编号
	 uint8 tradeno[16];//交易流水号
	 uint16 business_type;//业务类型 0x01 充电 0x02 放点
   uint8 time_begin[7];//开始充电时间
   uint8 time_end[7];//结束时间
	
	 struct t_order_elecmsg elecmsg[4];//尖峰平谷 四个区段
	 
	 uint16 cal_type;//计量示数类型
	 uint32 total_elecbegin;//总起示值
	 uint32 total_elecend;//总止示值
	 uint8 sharetime_flag;//分时计费标识
	 
	 uint16 totaltime;//总耗时 分钟
	 uint16 endreason;//充电结束原因
	 uint16 remaintime;//预计剩余充电时间
	 
	 uint32 lastpower;//上次电度数 精确到小数点后两位
};

void reset_order(struct t_nw_order *order);//复位订单
void init_order(struct t_nw_order *order,struct t_cli_costmode *clicostmode,uint8 type,void *arg);//初始化订单
void order_updatepower(struct t_nw_order *order,uint32 power);//功率变化0.01kwh就更新

void order_set_endreason(struct t_nw_order *order,uint8 endreason);//设置结束原因
uint16 order_get_endreason(struct t_nw_order *order);//拿取结束原因

uint16 order_get_startway(struct t_nw_order *order);//获取启动方式
uint16 get_order_business_type(struct t_nw_order *order);
uint16 get_order_caltype(struct t_nw_order *order);
uint8 get_order_sharetime_flag(struct t_nw_order *order);
void get_order_tradeno(struct t_nw_order *order,uint8 *tradeno);
uint8 get_order_startway(struct t_nw_order *order);
void get_order_userid(struct t_nw_order *order,uint8 *user_id);
void get_order_cardno(struct t_nw_order *order,uint8 *card_no);
void get_order_orderno(struct t_nw_order *order,uint8 *order_id);
void get_order_begintime(struct t_nw_order *order,uint8 *time);
void get_order_endtime(struct t_nw_order *order,uint8 *time);

uint32 get_order_time_power(struct t_nw_order *order,uint8 flag);//拿取某个时段电量
uint32 get_order_total_power(struct t_nw_order *order);//拿取总用电量

uint32 get_order_time_pcs(struct t_nw_order *order,uint8 flag);//拿取电费单价
uint32 get_order_time_eleccost(struct t_nw_order *order,uint8 flag);//拿取某个时点的电费
uint32 get_order_total_eleccost(struct t_nw_order *order);//拿取总电费

uint32 get_order_time_servepcs(struct t_nw_order *order,uint8 flag);//拿取某一时段的服务费单价
uint32 get_order_time_servecost(struct t_nw_order *order,uint8 flag);//拿取某个时段的服务费
uint32 get_order_total_servercost(struct t_nw_order *order);//拿取总的服务费

uint32 get_order_reserve_pcs(struct t_nw_order *order,uint8 flag);//预约费单价
uint32 get_order_total_reservecost(struct t_nw_order *order);//拿取总的预约费

uint32 get_order_position_pcs(struct t_nw_order *order,uint8 flag);//占位费单价
uint32 get_order_total_positioncost(struct t_nw_order *order);//拿取总的占位费

uint16 get_order_totaltime(struct t_nw_order *order);//总耗时
uint16 get_order_remaintime(struct t_nw_order *order);//预计剩余充电时间
uint32 get_order_totalcost(struct t_nw_order *order);//总费用

uint32 get_order_money_afterpay(struct t_nw_order *order);//获取扣款后钱包余额
uint32 get_order_consume_pcs(struct t_nw_order *order);//获取消费单价
uint32 get_order_consume_money(struct t_nw_order *order);//获取消费金额
uint32 get_order_user_remain(struct t_nw_order *order);//获取钱包余额
void   get_order_costmode_id(struct t_nw_order *order,uint8 *id);//获取计费模型id
#endif
